<?php
declare (strict_types = 1);
/**
 * 家
 */
namespace app\common\admin;

use app\common\facade\admin\AdminAdmin;
use app\common\facade\admin\HomeAdmin;
use app\common\facade\extend\RedisExtend;
use app\common\facade\admin\LogAdmin;
use think\facade\Request;
use think\facade\Cache;

class BaseAdmin
{
    // 管理员访问地址
    protected function pathRole()
    {
        return Request::controller() . '/' . ucfirst(Request::action());
        // return Request::pathinfo();
    }

    // 请求头登录密钥
    protected function accessLoginHeader()
    {
        return Request::header('accesslogin');
    }

    // 应用前缀
    protected function domainBindAdmin()
    {
        return env('domain_bind.admin');
    }

    // 登录信息检查
    protected function adminLoginInfo()
    {

        $accessLoginHeader = self::accessLoginHeader();
        
        if (empty($accessLoginHeader)) exception('登录信息出现异常，请重新登录', 800);

        // $infoAdmin = RedisExtend::hGetAll(self::domainBindAdmin() . $accessLoginHeader); // 原先使用的是redis 保存用户信息。
        $infoAdmin = Cache::get(self::domainBindAdmin() . $accessLoginHeader);

        if (empty($infoAdmin)):
            $paramAdmin = [
                'enable'      => 2,
                'access_login' => $accessLoginHeader,
            ];

            $infoAdmin = AdminAdmin::adminInfo($paramAdmin);

            if (empty($infoAdmin)) exception('登录信息已过期，请重新登录...', 800);

            HomeAdmin::baseLogin($infoAdmin, $infoAdmin['access_login']);
        endif;

        return $infoAdmin;
    }

    /* 
     * 日志添加，公用方法 
     * type string  日志类型  sys:系统日志，mat:素材操作日志, pro:节目单操作日志
     * msg  string  日志具体操作内容
     * adminLoginInfo  array  操作用户信息
     */
    public function syslog($type='sys', $msg=null, $adminLoginInfo)
    {
        if (!empty($adminLoginInfo)){
            $data = [
                'user_id' => $adminLoginInfo['id'],
                'role_id' => $adminLoginInfo['roleId'],
                'ip'      => Request::ip(),
                'type'    => $type,
                'msg'     => $msg,
                'create_time'  => date('Y-m-d H:i:s',time())
            ];
    
            return LogAdmin::AddLog($data);
        }else{
            return false;
        }
    }
}
